package student.aistar.day11.homework;

import java.util.LinkedList;
import java.util.Scanner;

public class BracketsDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入括号:>");
        String line = sc.nextLine();
        if(matches(line)){
            System.out.println("匹配");
        }else{
            System.out.println("不匹配");
        }
    }

    private static boolean matches(String line) {
        //1. 将字符串转成字符数组
        char[] arr = line.toCharArray();
        //2. 新建一个LinkedList集合
        LinkedList<Character> list = new LinkedList<>();
        //3. 将数组中的第一个元素压入栈顶
        list.push(arr[0]);
        //4. 从arr数组的第二个位置开始遍历
        for (int i = 1; i < arr.length; i++) {
            //()[]{}
            //获取当前的arr[i]
            Character c = arr[i];
            //为了避免在栈顶已经没有元素的情况下还去获取栈顶元素,非空判断
            if(list.isEmpty()){
                list.push(c);
                continue;
            }
            //5. 先获取栈顶元素
            Character top = list.getFirst();

            //6. 栈顶元素和当前的arr[i]进行匹配
            if(top.equals('(')&&c.equals(')') || top.equals('{')&&c.equals('}') || top.equals('[')&&c.equals(']')){
                //弹出栈顶元素
                list.pop();
            }else{
                //继续将当前的arr[i]压入栈顶
                list.push(c);
            }
        }
        return list.isEmpty();
    }
}
